import pandas as pd
from .modules.fund.factory import FundETFFactory


def get_fund_etf_category(category: str = "封闭式基金", source: str = "sina") -> pd.DataFrame:
    """
    获取基金ETF分类数据
    
    Args:
        category: 基金分类，可选值为 {"封闭式基金", "ETF基金", "LOF基金"}，默认为 "封闭式基金"
        source: 数据源，默认为 "sina"
    
    Returns:
        pd.DataFrame: 基金ETF分类数据
    """
    # 使用工厂创建数据源实例
    provider = FundETFFactory.create(source)
    # 调用相应方法获取数据
    return provider.get_fund_etf_category(category)


def get_fund_etf_daily(source: str = "sina") -> pd.DataFrame:
    """
    获取所有场内交易基金日行情数据
    
    Args:
        source: 数据源，默认为 "sina"
    
    Returns:
        pd.DataFrame: 基金ETF日行情数据
    """
    # 使用工厂创建数据源实例
    provider = FundETFFactory.create(source)
    # 调用相应方法获取数据
    return provider.get_fund_etf_daily()


def get_fund_overview(symbol: str, source: str = "sina") -> pd.DataFrame:
    """
    获取基金概况数据
    
    Args:
        symbol: 基金代码，例如 "518850"
        source: 数据源，默认为 "sina"
    
    Returns:
        pd.DataFrame: 基金概况数据
    """
    # 使用工厂创建数据源实例
    provider = FundETFFactory.create(source)
    # 调用相应方法获取数据
    return provider.get_fund_overview(symbol)


def get_fund_etf_hist_min(symbol: str,start_date: str, end_date: str, period: str = "1", adjust: str = "", 
                          source: str = "sina") -> pd.DataFrame:
    """
    获取基金ETF分钟级别数据
    
    Args:
        symbol: 基金代码，例如 "518850"
        period: 时间周期，默认为 "1" 表示1分钟
        adjust: 复权类型，默认为空 choice of {'', 'qfq', 'hfq'}
        start_date: 开始时间，例如 "2025-11-20 09:30:00"
        end_date: 结束时间，例如 "2025-11-20 17:40:00"
        source: 数据源，默认为 "sina"
    
    Returns:
        pd.DataFrame: 基金ETF分钟级别数据
    """
    # 使用工厂创建数据源实例
    provider = FundETFFactory.create(source)
    # 调用相应方法获取数据
    return provider.get_fund_etf_hist_min(
        symbol=symbol,
        period=period,
        adjust=adjust,
        start_date=start_date,
        end_date=end_date
    )


# def get_fund_etf_hist(symbol: str, source: str = "sina") -> pd.DataFrame:
#     """
#     获取基金ETF历史数据
#     
#     Args:
#         symbol: 基金代码，例如 "sh518850"
#         source: 数据源，默认为 "sina"
#     
#     Returns:
#         pd.DataFrame: 基金ETF历史数据
#     """
#     # 使用工厂创建数据源实例
#     provider = FundETFFactory.create(source)
#     # 调用相应方法获取数据
#     return provider.get_fund_etf_hist(symbol)